﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using DevExpress.Xpf.Core;
using ThanNhanTao.Server;
using System.Windows.Markup;
using DevExpress.Xpf.Grid;
using DevExpress.Xpf.Editors;
using DevExpress.XtraEditors.DXErrorProvider;
using ThanNhanTao.CommonControl;
using ThanNhanTao.Server.BLL;
using System.Configuration;


namespace ThanNhanTao
{
    /// <summary>
    /// Interaction logic for frmPhieuBenhNhan.xaml
    /// </summary>
    public partial class frmPhieuBenhNhan : DXWindow
    {
        private bool isUpDate=true;
        private static PhieuBenhNhanBll benhNhanBLL;
        private static BenhKemTheoBLL benhKemTheoBll;
        private static BenhNhan benhNhanSave;
        private static Dm_BenhVienBLL benhVienBLL = new Dm_BenhVienBLL();
        private static MainWindow mainWBK;
        private static string NgoaiTru1="";
        private static string NgoaiTru2="";
        private static string MaSoNhapVien = "";
        private static string soID = "";
        public bool daLuuThanhCong;
        private bool isCheckLoaiHoSo = false;
        List<Dm_ChanDoan> dsChanDoan;
        public frmPhieuBenhNhan(MainWindow mainWin,BenhNhan upBenhNhan)
        {
            InitializeComponent();
            daLuuThanhCong = false;
            mainWBK = mainWin;
            isLoader();
            benhNhanSave = upBenhNhan;
            setUpDateBenhNha(upBenhNhan);
            textBoxID.IsReadOnly = true;
            isUpDate = false;
            isCheckLoaiHoSo = true;
            benhKemTheoBll = new BenhKemTheoBLL();
            SetUpdateDanhSachBenhKem(upBenhNhan.IdBenhNhan);
            textBoxSoBHYT_PreviewLostKeyboardFocus(null, null);
            checkBoxTaoHoSoMoi.Visibility = Visibility.Visible; 
        }
        public frmPhieuBenhNhan(MainWindow mainWin)
        {
            InitializeComponent();
            mainWBK = mainWin;
            isLoader();
        }
        private void setUpDateBenhNha(BenhNhan bnTemp)
        {
            textBoxHo.Text=bnTemp.Ho;
            textBoxTen.Text=bnTemp.Ten;
            textBoxTuoi.Text=bnTemp.Tuoi.ToString();
            comboBoxGioiTinh.SelectedIndex=bnTemp.GioiTinh ? 0 : 1;
            comboBoxNgheNghiep.EditValue = bnTemp.Dm_NgheNghiep;
            if (string.IsNullOrEmpty(comboBoxNgheNghiep.DisplayText))
            {
               comboBoxNgheNghiep.EditValue=bnTemp.MaNgheNghiep;
            }
            textBoxDiaChi.Text=bnTemp.DiaChi;
            comboBoxDanToc.EditValue = bnTemp.Dm_DanToc;
            if (string.IsNullOrEmpty(comboBoxDanToc.DisplayText))
            {
                comboBoxDanToc.EditValue=bnTemp.MaDanToc;
            }
            checkBoxNgoaiTinh.IsChecked=bnTemp.LaNgoaiTinh;
            checkBoxBHYT.IsChecked=bnTemp.LaBHYT;
            textBoxSoBHYT.Text=bnTemp.SoBHYT;
            if (bnTemp.TuNgay.HasValue)
            {
                datePickerTuNgay.DateTime = bnTemp.TuNgay.Value;
                datePickerTuNgay.EditValue = bnTemp.TuNgay.Value;
            }
            else
            {
                datePickerTuNgay.Clear();
            }
            if (bnTemp.DenNgay.HasValue)
            {
                datePickerDenNgay.DateTime = bnTemp.DenNgay.Value;
                datePickerDenNgay.EditValue = bnTemp.DenNgay.Value;
            }
            else
            {
                datePickerDenNgay.Clear();
            }
            textBoxNoiGioThieu.Text=bnTemp.NoiGioiThieu;
            textBoxID.Text=bnTemp.IdBenhNhan.ToString();
            textBoxSoNhapVien.Text=bnTemp.SoNhapVien;
            if (bnTemp.NgayVaoVien.HasValue)
            {
                datePickerVaoVien.DateTime = bnTemp.NgayVaoVien.Value;
                datePickerVaoVien.EditValue = bnTemp.NgayVaoVien.Value;

            }
            else
            {
                datePickerVaoVien.Clear();
            }
            if (bnTemp.NgayRaVien.HasValue)
            {
                datePickerRaVien.DateTime = bnTemp.NgayRaVien.Value;
                datePickerRaVien.EditValue = bnTemp.NgayRaVien.Value;

            }
            else
            {
                datePickerRaVien.Clear();
            }
            if (bnTemp.NgayDenKhoa.HasValue)
            {
                datePickerDenKhoa.DateTime = bnTemp.NgayDenKhoa.Value;
                datePickerDenKhoa.EditValue = bnTemp.NgayDenKhoa.Value;

            }
            else
            {
                datePickerDenKhoa.Clear();
            }
            if (bnTemp.NgayChayThanDauTien.HasValue)
            {
                datePickerNgayChayDauTien.DateTime = bnTemp.NgayChayThanDauTien.Value;
                datePickerNgayChayDauTien.EditValue = bnTemp.NgayChayThanDauTien.Value;

            }
            else
            {
                datePickerNgayChayDauTien.Clear();
            }
            textBoxChuyenDen.Text=bnTemp.ChuyenDen;
            setTinhHinhTuVong(bnTemp.TinhHinhTuVong);
            setLoaiBenhNhan(bnTemp.LoaiBenhNhan);
            setLoaiHoSo(bnTemp.LoaiHoSo);
            textBoxPhuongPhapDieuTri.Text=bnTemp.PhuongPhapDieuTri;
            textBoxSoLanTHT.Text=bnTemp.SoLanTHT;
            textBoxSoLanSLM.Text=bnTemp.SoLanSLM;
            textBoxMLTPE2000.Text=bnTemp.MLTPE2000;
            textBoxTuiDungDich.Text=bnTemp.TuiDungDich;
            //textBoxMLPrisma.Text=bnTemp.MLPrisma;
            //textBoxMLPrismaflex.Text=bnTemp.MLPrismaflex;
            comboBoxNhomMau.Text = bnTemp.MLPrisma;
            comboBoxKhuVuc.Text = bnTemp.MLPrismaflex;

            textBoxHemosol.Text=bnTemp.Hemosol;
            textBoxHemosolCitrat.Text=bnTemp.HemosolCitrat;
            comboBoxChanDoan.EditValue=bnTemp.Dm_ChanDoan;
            if (string.IsNullOrEmpty(comboBoxChanDoan.DisplayText))
            {
                comboBoxChanDoan.EditValue=bnTemp.MaChanDoan;
            }
            textBoxChanDoan.Text=bnTemp.GiaiTrinh;
            textBoxGhiChu.Text=bnTemp.GhiChu;
            textBoxLoiDan.Text=bnTemp.LoiDan;
            SetThongTinChayThanDauCuoi(bnTemp.IdBenhNhan);
        }

        private void SetThongTinChayThanDauCuoi(int idBenhNhan)
        {
            int soLanChay;
            ChayThanNhanTao chayDau;
            ChayThanNhanTao chayCuoi;
            benhNhanBLL.LanChayDauTienVaSauCung(idBenhNhan, out soLanChay, out chayDau, out chayCuoi);
            if (chayDau != null && chayCuoi != null)
            {
                lblChayThongBao.Text = "Chạy thận lần " + chayDau.SoLan + " ngày " + chayDau.NgayChay.ToString("dd/MM/yyyy")
                                         + "\nĐến lần " + chayCuoi.SoLan + " ngày " + chayCuoi.NgayChay.ToString("dd/MM/yyyy")
                                         + "\nTổng chạy " + soLanChay.ToString() + " lần.";
            }
        }

        private void SetUpdateDanhSachBenhKem(int idBenhNhan)
        {
            foreach (BenhKemTheo bkTheo in benhKemTheoBll.SelectAllIdBenhNhanBenhKemTheo(idBenhNhan))
            {
                for (int i = 0; i < dsChanDoan.Count;i++)
                {
                    if(bkTheo.Dm_ChanDoan.MaChanDoan.Equals(dsChanDoan[i].MaChanDoan))
                    {
                        comboBoxBenhKem.SelectedItems.Add(dsChanDoan[i]);
                    }
                }
            }
        }

        private void isLoader()
        {
            benhNhanBLL = new PhieuBenhNhanBll();
            benhNhanSave = new BenhNhan();
            dsChanDoan = new List<Dm_ChanDoan>();
            getDanToc();
            getNgheNghiep();
            getChanDoan();
            LamMoi();
            textBoxHo.Focus();
        }

        private void buttonLuu_Click(object sender, RoutedEventArgs e)
        {
            if (string.IsNullOrEmpty(textBoxHo.Text.Trim()))
            {
                DXMessageBox.Show("Xin nhập đầy đủ họ tên bệnh nhân.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                textBoxHo.Focus();
                return;
            }
            else if (string.IsNullOrEmpty(textBoxTen.Text.Trim()))
            {
                DXMessageBox.Show("Xin nhập tên bệnh nhân.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                textBoxTen.Focus();
                return;
            }
            else if (string.IsNullOrEmpty(textBoxTuoi.Text.Trim()))
            {
                DXMessageBox.Show("Xin nhập tuổi bệnh nhân.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                textBoxTuoi.Focus();
                return;
            }
            if (isUpDate)
            {
                AddNewBenhNhan();
                SetSoLuongBenhNhanDieuTriHoacXuatVienAdd(benhNhanSave.NgayRaVien);
            }
            else
            {
                UpdateBenhNhan();
                SetSoLuongBenhNhanDieuTriHoacXuatVienAdd(benhNhanSave.NgayRaVien);
                //isUpDate = true;
            }
        }

        private void UpdateBenhNhan()
        {
            try
            {
                BenhNhan bn = getManHinhBN();
                if (benhNhanBLL.UpdateBenhNhan(bn) > 0)
                {
                    daLuuThanhCong = true;
                    DXMessageBox.Show("Cập nhật bệnh nhân thành công", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Information);
                    mainWBK.UpDateBenhNhanGrid(bn);
                    benhNhanSave = new BenhNhan();
                    benhNhanSave = bn;
                    //LamMoi();
                    AddBenhKemTheo(bn);
                }
                else
                {
                    DXMessageBox.Show("Cập nhật bệnh nhân không thành công", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                }
            }
            catch
            {
                DXMessageBox.Show("Lỗi nội bộ. Thao tác không thành công.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            
        }

        private void AddNewBenhNhan()
        {
            try
            {
                BenhNhan bn = getManHinhBN();
                bn.MLTPE2000 = "";
                bn.HemosolCitrat = "";
                if (benhNhanBLL.AddBenhNhan(ref bn) > 0)
                {
                    daLuuThanhCong = true;
                    DXMessageBox.Show("Thêm mới bệnh nhân thành công", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Information);
                    mainWBK.AddBenhNhanGrid(bn);
                    benhNhanSave = new BenhNhan();
                    benhNhanSave = bn;
                    isUpDate = false;
                    //LamMoi();
                    AddBenhKemTheo(bn);
                    
                }
                else
                {
                    DXMessageBox.Show("Thêm mới bệnh nhân không thành công", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                }
            }
            catch
            {
                DXMessageBox.Show("Lỗi nội bộ. Thao tác không thành công.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            
        }

        private void SetSoLuongBenhNhanDieuTriHoacXuatVienAdd(DateTime ? ngayXuatVien)
        {
            if (ngayXuatVien == null || (ngayXuatVien.Value > DateTime.Now))
            {
                ThanNhanTaoGlobal.SLBenhNhanDangDieuTri += 1;
            }
            else
            {
                ThanNhanTaoGlobal.SLBenhNhanDaXuatVien += 1;
            }
            ThanNhanTaoGlobal.SetThongTinChungFormMain();
        }

        private void AddBenhKemTheo(BenhNhan benhNhanDto)
        {
            try
            {
                List<BenhKemTheo> listBenhKemTheo = new List<BenhKemTheo>();
                foreach (Dm_ChanDoan bktheo in comboBoxBenhKem.SelectedItems.ToList())
                {
                    BenhKemTheo benhKemDto = new BenhKemTheo();
                    benhKemDto.IdBenhNhan = benhNhanDto.IdBenhNhan;
                    benhKemDto.MaChanDoan = bktheo.MaChanDoan;
                    listBenhKemTheo.Add(benhKemDto);
                }
                benhKemTheoBll.SaveBenhKemTheo(listBenhKemTheo, benhNhanDto.IdBenhNhan);
            }
            catch
            {
            }
        }

        private BenhNhan getManHinhBN()
        {
            BenhNhan benhNhanNew = new BenhNhan();
            benhNhanNew.Ho = textBoxHo.Text.Trim();
            benhNhanNew.Ten = textBoxTen.Text.Trim();
            benhNhanNew.Tuoi = short.Parse(textBoxTuoi.Text.Trim());

            benhNhanNew.GioiTinh = comboBoxGioiTinh.DisplayText.Equals("Nam")? true:false;

            benhNhanNew.DiaChi = textBoxDiaChi.Text;
            benhNhanNew.LaNgoaiTinh = checkBoxNgoaiTinh.IsChecked.Value;
            benhNhanNew.LaBHYT = checkBoxBHYT.IsChecked.Value;
            benhNhanNew.SoBHYT = textBoxSoBHYT.Text.Trim();
            benhNhanNew.TuNgay = datePickerTuNgay.DateTime;
            benhNhanNew.DenNgay = datePickerDenNgay.DateTime;
            benhNhanNew.NoiGioiThieu = textBoxNoiGioThieu.Text;
            benhNhanNew.IdBenhNhan = int.Parse(textBoxID.Text.Trim());
            benhNhanNew.SoNhapVien = textBoxSoNhapVien.Text.Trim();
            benhNhanNew.NgayVaoVien = datePickerVaoVien.DateTime;
            if (datePickerRaVien.EditValue == null || datePickerRaVien.DateTime == DateTime.MinValue)
            {
                benhNhanNew.NgayRaVien = null;
            }
            else
            {
                benhNhanNew.NgayRaVien = datePickerRaVien.DateTime;
            }
            if (datePickerNgayChayDauTien.EditValue == null || datePickerNgayChayDauTien.DateTime == DateTime.MinValue)
            {
                benhNhanNew.NgayChayThanDauTien = null;
            }
            else
            {
                benhNhanNew.NgayChayThanDauTien = datePickerNgayChayDauTien.DateTime;
            }
            benhNhanNew.NgayDenKhoa = datePickerDenKhoa.DateTime;
            benhNhanNew.ChuyenDen = textBoxChuyenDen.Text;
            benhNhanNew.TinhHinhTuVong = getTinhHinhTuVong();
            benhNhanNew.LoaiBenhNhan = getLoaiBenhNhan();
            benhNhanNew.LoaiHoSo = getLoaiHoSo();
            benhNhanNew.PhuongPhapDieuTri = textBoxPhuongPhapDieuTri.Text;
            benhNhanNew.SoLanTHT = textBoxSoLanTHT.Text.Trim();
            benhNhanNew.SoLanSLM = textBoxSoLanSLM.Text.Trim();
            benhNhanNew.MLTPE2000 = "";// textBoxMLTPE2000.Text.Trim();
            benhNhanNew.TuiDungDich = textBoxTuiDungDich.Text.Trim();
            //benhNhanNew.MLPrisma = textBoxMLPrisma.Text.Trim();
            //benhNhanNew.MLPrismaflex = textBoxMLPrismaflex.Text.Trim();
            benhNhanNew.MLPrisma = comboBoxNhomMau.DisplayText;
            benhNhanNew.MLPrismaflex = comboBoxKhuVuc.DisplayText;

            benhNhanNew.Hemosol = textBoxHemosol.Text.Trim();
            benhNhanNew.HemosolCitrat = textBoxHemosolCitrat.Text.Trim();
            Dm_NgheNghiep dmNgheNghiep;
            if (comboBoxNgheNghiep.SelectedItem != null)
                dmNgheNghiep = comboBoxNgheNghiep.SelectedItem as Dm_NgheNghiep;
            else
                dmNgheNghiep = comboBoxNgheNghiep.EditValue as Dm_NgheNghiep;

            if (dmNgheNghiep != null)
            {
                dmNgheNghiep = new Dm_NgheNghiep { MaNgheNghiep = dmNgheNghiep.MaNgheNghiep, TenNgheNghiep = dmNgheNghiep.TenNgheNghiep};
                benhNhanNew.Dm_NgheNghiep = dmNgheNghiep;
                benhNhanNew.MaNgheNghiep = dmNgheNghiep.MaNgheNghiep;
            }
            Dm_DanToc dmDanToc;
            if (comboBoxDanToc.SelectedItem != null)
                dmDanToc = comboBoxDanToc.SelectedItem as Dm_DanToc;
            else
                dmDanToc = comboBoxDanToc.EditValue as Dm_DanToc;
           
            if (dmDanToc != null)
            {
                dmDanToc = new Dm_DanToc { MaDanToc = dmDanToc.MaDanToc, TenDanToc = dmDanToc.TenDanToc};
                benhNhanNew.Dm_DanToc = dmDanToc;
                benhNhanNew.MaDanToc = dmDanToc.MaDanToc;
            }
            Dm_ChanDoan dmChanDoan;
            if (comboBoxChanDoan.SelectedItem != null)
                dmChanDoan = comboBoxChanDoan.SelectedItem as Dm_ChanDoan;
            else
                dmChanDoan = comboBoxChanDoan.EditValue as Dm_ChanDoan;
            
            if (dmChanDoan != null)
            {
                dmChanDoan = new Dm_ChanDoan { MaChanDoan = dmChanDoan.MaChanDoan, TenChanDoan = dmChanDoan.TenChanDoan };
                benhNhanNew.Dm_ChanDoan = dmChanDoan;
                benhNhanNew.MaChanDoan = dmChanDoan.MaChanDoan;
            }
            benhNhanNew.GiaiTrinh = textBoxChanDoan.Text;
            benhNhanNew.GhiChu = textBoxGhiChu.Text;
            benhNhanNew.LoiDan = textBoxLoiDan.Text;

            return benhNhanNew;
        }

        private void LamMoi()
        {
            try
            {
                textBoxID.Text = (benhNhanBLL.getSoIDMax() + 1).ToString();
                //textBoxID.IsReadOnly = false;
                benhNhanSave = null;
                isUpDate = true;
                isCheckLoaiHoSo = false;
                textBoxHo.Clear();
                textBoxTen.Clear();
                textBoxTuoi.Text = "";
                textBoxHo.Text = "";
                textBoxTen.Text = "";
                textBoxTuoi.Text = "";
                comboBoxGioiTinh.SelectedIndex = 0;
                comboBoxNgheNghiep.SelectedIndex = -1;
                textBoxDiaChi.Clear();
                comboBoxDanToc.SelectedIndex = -1;
                checkBoxNgoaiTinh.IsChecked = false;
                checkBoxBHYT.IsChecked = false;
                textBoxSoBHYT.Clear();
                textBoxSoBHYT.Text = "";
                datePickerTuNgay.DateTime = DateTime.Now;
                datePickerDenNgay.DateTime = DateTime.Now;
                textBoxNoiGioThieu.Clear();
                textBoxSoNhapVien.Clear();
                datePickerVaoVien.DateTime = DateTime.Now;
                textBoxHo.Focus();
                datePickerRaVien.DateTime = DateTime.MinValue;
                datePickerNgayChayDauTien.DateTime = DateTime.MinValue;
                //datePickerRaVien.Text = null;
                datePickerRaVien.EditValue = null;
                datePickerRaVien.Delete();
                datePickerNgayChayDauTien.EditValue = null;
                datePickerNgayChayDauTien.Delete();
                //datePickerRaVien.EditValue = null;

                datePickerDenKhoa.DateTime = DateTime.Now;
                textBoxChuyenDen.Clear();
                checkBoxNangXinVe.IsChecked = false;
                checkBoxTuVong.IsChecked = false;
                checkBoxTuVong24.IsChecked = false;
                textBoxPhuongPhapDieuTri.Clear();
                textBoxSoLanTHT.Clear();
                textBoxSoLanSLM.Clear();
                textBoxMLTPE2000.Clear();
                textBoxTuiDungDich.Clear();
                //textBoxMLPrisma.Clear();
                //textBoxMLPrismaflex.Clear();
                comboBoxNhomMau.Text = "";
                comboBoxKhuVuc.Text = "";

                textBoxHemosol.Clear();
                textBoxHemosolCitrat.Clear();
                textBoxLoiDan.Clear();
                textBoxChanDoan.Clear();
                textBoxGhiChu.Clear();
                comboBoxChanDoan.SelectedIndex = 0;
                comboBoxMaBenh.SelectedIndex = 0;
                lblChayThongBao.Text = "";

                checkBoxCapCuu.IsChecked = false;
                checkBoxManTinh.IsChecked = false;
                checkBoxNgoaiTru.IsChecked = false;
                checkBoxNoiTru.IsChecked = false;

                NgoaiTru1 = ConfigurationManager.AppSettings["MaNVNgoaiTru1"].ToString();
                NgoaiTru2 = ConfigurationManager.AppSettings["MaNVNgoaiTru2"].ToString();

                checkBoxTaoHoSoMoi.Visibility = Visibility.Hidden;
                checkBoxTaoHoSoMoi.IsChecked = false;
            }
            catch (Exception)
            {
            }
        }

        #region Get, set tinh hinh tu vong
        private byte getTinhHinhTuVong()
        {
            if(checkBoxTuVong.IsChecked.Value)
            {
                return ThanNhanTao.Server.Enum.EnumTuVong.TuVong;
            }
            else if(checkBoxTuVong24.IsChecked.Value)
            {
                return ThanNhanTao.Server.Enum.EnumTuVong.TamDung;
            }
            else if (checkBoxNangXinVe.IsChecked.Value)
            {
                return ThanNhanTao.Server.Enum.EnumTuVong.NangXinVe;
            }
            return 0;
        }
        private void setTinhHinhTuVong(byte tv)
        {
            if (tv == ThanNhanTao.Server.Enum.EnumTuVong.TuVong)
            {
                checkBoxTuVong.IsChecked = true;
            }
            else if (tv == ThanNhanTao.Server.Enum.EnumTuVong.TamDung)
            {
                checkBoxTuVong24.IsChecked=true;
            }
            else if (tv == ThanNhanTao.Server.Enum.EnumTuVong.NangXinVe)
            {
               checkBoxNangXinVe.IsChecked=true;
            }
           
        }
        #endregion

        #region Get, set loai benh nhan
        private byte getLoaiBenhNhan()
        {
            if (checkBoxCapCuu.IsChecked.Value)
            {
                return ThanNhanTao.Server.Enum.EnumLoaiBenhNhan.BNCapCuu;
            }
            else if (checkBoxManTinh.IsChecked.Value)
            {
                return ThanNhanTao.Server.Enum.EnumLoaiBenhNhan.BNManTinh;
            }
            return ThanNhanTao.Server.Enum.EnumLoaiBenhNhan.MacDinh;
        }
        private void setLoaiBenhNhan(byte tv)
        {
            if (tv == ThanNhanTao.Server.Enum.EnumLoaiBenhNhan.BNCapCuu)
            {
                checkBoxCapCuu.IsChecked = true;
            }
            else if (tv == ThanNhanTao.Server.Enum.EnumLoaiBenhNhan.BNManTinh)
            {
                checkBoxManTinh.IsChecked = true;
            }
            else
            {
                checkBoxCapCuu.IsChecked = false;
                checkBoxManTinh.IsChecked = false;
            }
        }
        #endregion

        #region Get, set loai ho so
        private byte getLoaiHoSo()
        {
            if (checkBoxNgoaiTru.IsChecked.Value)
            {
                return ThanNhanTao.Server.Enum.EnumLoaiHoSo.HSNgoaiTru;
            }
            else if (checkBoxNoiTru.IsChecked.Value)
            {
                return ThanNhanTao.Server.Enum.EnumLoaiHoSo.HSNoiTru;
            }
            return ThanNhanTao.Server.Enum.EnumLoaiHoSo.MacDinh;
        }
        private void setLoaiHoSo(byte tv)
        {
            if (tv == ThanNhanTao.Server.Enum.EnumLoaiHoSo.HSNgoaiTru)
            {
                checkBoxNgoaiTru.IsChecked = true;
            }
            else if (tv == ThanNhanTao.Server.Enum.EnumLoaiHoSo.HSNoiTru)
            {
                checkBoxNoiTru.IsChecked = true;
            }
            else
            {
                checkBoxNgoaiTru.IsChecked = false;
                checkBoxNoiTru.IsChecked = false;
            }
        }
        #endregion

        private void getDanToc()
        {
            comboBoxDanToc.ItemsSource = benhNhanBLL.GetListDanToc();
            comboBoxDanToc.DisplayMember = "TenDanToc";
            comboBoxDanToc.ValueMember = "MaDanToc";
        }
        private void getNgheNghiep()
        {
            comboBoxNgheNghiep.ItemsSource = benhNhanBLL.GetListNgheNghiep();
            comboBoxNgheNghiep.DisplayMember = "TenNgheNghiep";
            comboBoxNgheNghiep.ValueMember = "MaNgheNgiep";
        }
        private void getChanDoan()
        {
            dsChanDoan= benhNhanBLL.GetListChanDoan();
            comboBoxChanDoan.ItemsSource = dsChanDoan;
            comboBoxChanDoan.DisplayMember = "TenChanDoan";
            comboBoxChanDoan.ValueMember = "MaChanDoan";
   
            comboBoxMaBenh.ItemsSource = dsChanDoan;
            comboBoxMaBenh.DisplayMember = "MaChanDoan";
            comboBoxMaBenh.ValueMember = "MaChanDoan";

            comboBoxBenhKem.ItemsSource = dsChanDoan;
            //comboBoxBenhKem.DisplayMember = "TenChanDoan";
            //comboBoxBenhKem.ValueMember = "MaChanDoan";
        }
       
        private void buttonXoa_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                int id=int.Parse(textBoxID.Text.Trim());
                if (benhNhanBLL.DeleteBenhNhan(id))
                {
                    DXMessageBox.Show("Xóa bệnh nhân thành công","Thông báo",MessageBoxButton.OK,MessageBoxImage.Information);
                    mainWBK.DeleBenhNhan(id);
                    LamMoi();
                }
                else
                {
                    DXMessageBox.Show("Xóa bệnh nhân không thành công.\n Các lý do:\n-Thông tin bệnh nhân không được tìm thấy\n-Bệnh nhân đã được tạo các phiếu thanh toán\n-Bệnh nhân đã được tạo các phiếu chạy thận.","Thông báo",MessageBoxButton.OK,MessageBoxImage.Warning);
                }
            }
            catch
            {
                DXMessageBox.Show("Lỗi nội bộ. Thao tác không thành công.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        private void buttonLamMoi_Click(object sender, RoutedEventArgs e)
        {
            LamMoi();
            isUpDate = true;
        }

        private void buttonDong_Click(object sender, RoutedEventArgs e)
        {
            base.Close();
        }

        private void check_Validate(object sender, DevExpress.Xpf.Editors.ValidationEventArgs e)
        {
            TextEdit control = ((TextEdit)sender);
            if (control.CausesValidation)
            {
                e.ErrorType = ErrorType.Critical;
                if (e.Value != null)
                {
                    if (e.Value.ToString() == String.Empty)
                    {
                        e.ErrorContent = "Giá trị không được rỗng";
                        e.IsValid = false;
                    }
                    else
                    {
                        e.IsValid = true;
                    }
                }
                else
                {
                    e.ErrorContent = "Giá trị không được rỗng";
                    e.IsValid = false;
                }
                //control.CausesValidation = false;
            }
        }

        private void check_ValidateMaSoBN(object sender, DevExpress.Xpf.Editors.ValidationEventArgs e)
        {
            TextEdit control = ((TextEdit)sender);
            if (control.CausesValidation)
            {
                e.ErrorType = ErrorType.Critical;
                if (e.Value != null)
                {
                    if (e.Value.ToString() == String.Empty)
                    {
                        e.ErrorContent = "Giá trị không được rỗng";
                        e.IsValid = false;
                    }
                    else
                    {
                        e.IsValid = true;
                    }
                }
                else
                {
                    e.ErrorContent = "Giá trị không được rỗng";
                    e.IsValid = false;
                }
                //control.CausesValidation = false;
            }
            try
            {
                if (benhNhanSave !=null && isCheckLoaiHoSo)
                {
                    setLoaiHoSo(benhNhanSave.LoaiHoSo);
                    isCheckLoaiHoSo = false;
                }
                else
                {
                    if (control.Text.Trim().EndsWith(NgoaiTru1, StringComparison.OrdinalIgnoreCase) || control.Text.Trim().EndsWith(NgoaiTru2, StringComparison.OrdinalIgnoreCase))
                    {
                        checkBoxNgoaiTru.IsChecked = true;
                    }
                    else
                    {
                        checkBoxNoiTru.IsChecked = true;
                    }
                }
            }
            catch (Exception)
            {
            }
        }

        private void buttonChayThan_Click(object sender, RoutedEventArgs e)
        {
            frmPhieuChayThan frmChayThan = new frmPhieuChayThan(benhNhanSave);
            frmChayThan.ShowDialog();
            try
            {
                mainWBK.CapNhatLaiDaInKhiXoaPhieuChayThanCungNgay();
            }
            catch { }
        }

        private void textBoxHo_LostFocus(object sender, RoutedEventArgs e)
        {
            textBoxHo.Text = NameFormat(textBoxHo.Text);
        }
        private string NameFormat(string name)
        {
            if (!string.IsNullOrEmpty(name))
            {
                string[] stringArr = name.Split(' ');
                string newName = "";
                for (int i = 0; i < stringArr.Length; i++)
                {
                    if (stringArr[i] != "")
                        newName += stringArr[i].Trim().Substring(0, 1).ToUpper() + stringArr[i].Trim().Substring(1) + " ";
                }
                return newName.Trim();
            }
            else
                return string.Empty;
        }

        private void textBoxTen_LostFocus(object sender, RoutedEventArgs e)
        {
            textBoxTen.Text = NameFormat(textBoxTen.Text);
        }


        private void buttonPhieuNoiTru_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                frmThanhToanNgoaiTru frmThanhToanNgoai = new frmThanhToanNgoaiTru(benhNhanSave);
                frmThanhToanNgoai.ShowDialog();
            }
            catch { }
        }

        private void textBoxTuoi_LostFocus(object sender, RoutedEventArgs e)
        {
            try
            {
                int ntuoi = int.Parse(textBoxTuoi.Text.Trim());
                if (ntuoi > 100 && ntuoi <= DateTime.Now.Year)
                {
                    if (ntuoi.ToString().Trim().Length <= 3) return;
                    textBoxTuoi.Text = (DateTime.Now.Year - ntuoi).ToString();
                }
            }
            catch { }
        }

        private void AnHienBHYT(bool hidden)
        {
            textBoxSoBHYT.IsEnabled = hidden;
            datePickerTuNgay.IsEnabled = hidden;
            datePickerDenNgay.IsEnabled = hidden;
            
        }

        private void checkBoxBHYT_Checked(object sender, RoutedEventArgs e)
        {
            if(checkBoxBHYT.IsChecked.Value)
            {
                AnHienBHYT(true);
                datePickerTuNgay.DateTime = new DateTime(DateTime.Now.Year,1,1);
                datePickerDenNgay.DateTime = new DateTime(DateTime.Now.Year,12,31);
            }
        }

        private void checkBoxBHYT_Unchecked(object sender, RoutedEventArgs e)
        {
            if (checkBoxBHYT.IsChecked.Value==false)
            {
                AnHienBHYT(false);
            }
        }

        private void buttonPhieuNgoaiTru_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                frmThanhToanNoiTru frmThanhToanNoiTru = new frmThanhToanNoiTru(benhNhanSave);
                frmThanhToanNoiTru.ShowDialog();
                mainWBK.CapNhatLaiDaInKhiXoaPhieuChayThanCungNgayTuNoiTru();
            }
            catch
            {
            }
        }

        private void comboBoxChanDoan_EditValueChanged(object sender, EditValueChangedEventArgs e)
        {
            try
            {
                comboBoxMaBenh.EditValueChanged -= new EditValueChangedEventHandler(comboBoxMaBenh_EditValueChanged);
                comboBoxMaBenh.EditValue = e.NewValue;
                comboBoxMaBenh.EditValueChanged += new EditValueChangedEventHandler(comboBoxMaBenh_EditValueChanged);
                //comboBoxMaBenh.Text = e.NewValue.ToString();
            }
            catch
            {
            }
        }

        private void comboBoxMaBenh_EditValueChanged(object sender, EditValueChangedEventArgs e)
        {
            try
            {
                comboBoxChanDoan.EditValueChanged -= new EditValueChangedEventHandler(comboBoxChanDoan_EditValueChanged);
                comboBoxChanDoan.EditValue = e.NewValue;
                comboBoxChanDoan.EditValueChanged += new EditValueChangedEventHandler(comboBoxChanDoan_EditValueChanged);
            }
            catch
            {
            }
        }

        private void textBoxSoBHYT_PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
        {
            string[] arraySoBH = textBoxSoBHYT.Text.Split('-');
            if (arraySoBH.Count() > 1)
            {
                Dm_BenhVien dmBenhVien = benhVienBLL.RetrieveBenhVienByMaBV(arraySoBH[1]);
                txtNoiDKBD.Text = dmBenhVien != null ? dmBenhVien.TenBV : string.Empty;
            }
            else
                txtNoiDKBD.Clear();
        }

        private void datePickerTuNgay_EditValueChanged(object sender, EditValueChangedEventArgs e)
        {
            if ((sender as DateEdit).Name == "datePickerTuNgay")
            {
                datePickerTuNgay.CausesValidation = true; 
                datePickerTuNgay.DoValidate();
                datePickerDenNgay.DoValidate();
            }
            else if ((sender as DateEdit).Name == "datePickerDenNgay")
            {
                datePickerDenNgay.CausesValidation = true;
                datePickerDenNgay.DoValidate();
                datePickerTuNgay.DoValidate();
            }
            else if ((sender as DateEdit).Name == "datePickerDenKhoa")
            {
                datePickerDenKhoa.CausesValidation = true;
                datePickerDenKhoa.DoValidate();
                datePickerRaVien.DoValidate();
                datePickerVaoVien.DoValidate();
            }
            else if ((sender as DateEdit).Name == "datePickerRaVien")
            {
                datePickerRaVien.CausesValidation = true;
                datePickerRaVien.DoValidate();
                datePickerVaoVien.DoValidate();
                datePickerDenKhoa.DoValidate();
            }
            else if ((sender as DateEdit).Name == "datePickerVaoVien")
            {
                datePickerVaoVien.CausesValidation = true;
                datePickerVaoVien.DoValidate();
                datePickerRaVien.DoValidate();
                datePickerDenKhoa.DoValidate();
            }
        }

        private void CheckValidate(object sender, DevExpress.Xpf.Editors.ValidationEventArgs e)
        {
            BaseEdit control = ((BaseEdit)sender);
            DateTime temple = Convert.ToDateTime(e.Value);
            if (control.Name == "datePickerTuNgay")
            {
                if (datePickerTuNgay.EditValue == null)
                {
                    e.ErrorContent = "Xin chọn từ ngày";
                    e.IsValid = false;
                }
                else
                    if (Convert.ToDateTime(temple.ToShortDateString()) > Convert.ToDateTime(datePickerDenNgay.DateTime.ToShortDateString()))
                    {
                        e.ErrorContent = "Từ ngày không được lớn hơn đến ngày";
                        e.IsValid = false;
                    }
                    else
                    {
                        e.IsValid = true;
                        
                    }
            }
            else if (control.Name == "datePickerDenNgay")
                {
                    if (datePickerDenNgay.EditValue == null)
                    {
                        e.ErrorContent = "Xin chọn đến ngày";
                        e.IsValid = false;
                    }
                    else
                        if (Convert.ToDateTime(temple.ToShortDateString()) < Convert.ToDateTime(datePickerTuNgay.DateTime.ToShortDateString()))
                        {
                            e.ErrorContent = "Đến ngày không được nhỏ hơn từ ngày";
                            e.IsValid = false;
                        }
                        else
                        {
                            e.IsValid = true;
                            
                        }
                }
            else if (control.Name == "datePickerVaoVien")
            {
                if (datePickerVaoVien.EditValue == null)
                {
                    e.ErrorContent = "Xin chọn ngày vào viện";
                    e.IsValid = false;
                }
                else
                    if (Convert.ToDateTime(temple.ToShortDateString()) > Convert.ToDateTime(datePickerDenKhoa.DateTime.ToShortDateString()))
                    {
                        e.ErrorContent = "Ngày vào viện không được lớn hơn ngày đến khoa";
                        e.IsValid = false;
                    }
                    else
                        e.IsValid = true;
            }
            else if (control.Name == "datePickerDenKhoa")
            {
                if (datePickerDenKhoa.EditValue == null)
                {
                    e.ErrorContent = "Xin chọn ngày đến khoa";
                    e.IsValid = true;
                }
                else
                {

                    if (Convert.ToDateTime(temple.ToShortDateString()) > Convert.ToDateTime(datePickerRaVien.DateTime.ToShortDateString()))
                    {
                        e.ErrorContent = "Ngày đến khoa không được lớn hơn ngày ra viện";
                        e.IsValid = false;
                        if (datePickerRaVien.DisplayText=="" || datePickerRaVien.DisplayText==null)
                        {
                            e.IsValid = true;
                        }
                    }
                    else if (Convert.ToDateTime(temple.ToShortDateString()) < Convert.ToDateTime(datePickerVaoVien.DateTime.ToShortDateString()))
                    {
                        e.ErrorContent = "Ngày đến khoa không được nhỏ hơn ngày vào viện";
                        e.IsValid = false;
                    }
                    else
                        e.IsValid = true;
                }
            }
            else if (control.Name == "datePickerRaVien")
            {
                if (datePickerRaVien.EditValue == null)
                {
                    e.ErrorContent = "Xin chọn ngày ra viện";
                    e.IsValid = true;
                }
                else
                    if (Convert.ToDateTime(temple.ToShortDateString()) < Convert.ToDateTime(datePickerDenKhoa.DateTime.ToShortDateString()))
                    {
                        e.ErrorContent = "Ngày ra viện không được nhỏ hơn ngày đến khoa";
                        e.IsValid = false;
                        checkBoxAn.IsChecked = true;
                    }
                    else
                        e.IsValid = true;
            }
                else
                    e.IsValid = true;
        }

        private void checkBoxTuVong_Checked(object sender, RoutedEventArgs e)
        {
            if (String.IsNullOrEmpty(datePickerRaVien.DisplayText.Trim()))
            {
                datePickerRaVien.DateTime = DateTime.Now;
                datePickerRaVien.EditValue = DateTime.Now;
            }
           
        }

        private void datePickerRaVien_EditValueChanging(object sender, EditValueChangingEventArgs e)
        {
            try
            {
                if (e.NewValue==null)
                {
                    checkBoxAn.IsChecked = true;
                }
            }
            catch { }
        }
        
        private void checkBoxTaoHoSoMoi_Checked(object sender, RoutedEventArgs e)
        {
            try
            {
                isUpDate = true;
                MaSoNhapVien = textBoxSoNhapVien.Text;
                textBoxSoNhapVien.Text = "";
                soID = textBoxID.Text;
                textBoxID.Text = (benhNhanBLL.getSoIDMax() + 1).ToString();
            }
            catch (Exception)
            {
            }
        }

        private void checkBoxTaoHoSoMoi_Unchecked(object sender, RoutedEventArgs e)
        {
            try
            {
                isUpDate = false;
                textBoxSoNhapVien.Text = MaSoNhapVien;
                textBoxID.Text = soID;
            }
            catch (Exception)
            {
            }
        }
    }
}
namespace ConvertCustom
{
    public class RowHandleToStringConverter : MarkupExtension, IValueConverter
    {
        #region IValueConverter Members
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            int rowHandle = System.Convert.ToInt32(value);

            if (rowHandle == GridControl.NewItemRowHandle || rowHandle == GridControl.AutoFilterRowHandle)
                return string.Empty;

            rowHandle++;
            return rowHandle.ToString();
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
        #endregion

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return this;
        }
    }

    public class BooleanConverterTV : MarkupExtension, IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            string bResult = "";
            try
            {
                if (System.Convert.ToInt32(value) == 1)
                {
                    bResult="Tử vong";
                }
                else if (System.Convert.ToInt32(value) == 2)
                {
                    bResult ="Tạm dừng";
                }
                else if (System.Convert.ToInt32(value) == 3)
                {
                    bResult = "Nặng xin về";
                }
            }
            catch (Exception) { }

            return bResult;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return this;
        }
    }
    public class BooleanConverterXV : MarkupExtension, IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            bool bResult = false;
            try
            {
                if (System.Convert.ToInt32(value) == 3)
                {
                    bResult = true;
                }
                else
                {
                    bResult = false;
                }
            }
            catch (Exception) { }

            return bResult;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return this;
        }
    }
}
